查看原文
其他

【新开源报道 41】阿里正式开源动态非侵入 AOP 解决方案 JVM-Sandbox

2018-01-21 开源最前线
程序猿(ID:imkuqin) 猿妹 整编

整编自:https://github.com/alibaba/jvm-sandbox/wiki/USER-GUIDE



阿里开源动态非侵入 AOP 解决方案 JVM-Sandbox,JVM沙箱容器,一种JVM的非侵入式运行期AOP解决方案。


2014年GREYS第一版正式发布,2015年开始根据GREYS的底层代码完成了人生的第一个字节码增强工具——动态日志。之后又萌生了将其拆解成录制回放、故障模拟等工具的想法。


JVM沙箱容器 JVM-Sandbox


授权协议:LGPL-3.0

开发语言:Java

操作系统:跨平台

项目地址:https://github.com/alibaba/jvm-sandbox/wiki/USER-GUIDE


项目简介


JVM-SANDBOX的核心功能是什么?


实时无侵入AOP框架


在常见的AOP框架实现方案中,有静态编织和动态编织两种。

● 静态编织

静态编织发生在字节码生成时根据一定框架的规则提前将AOP字节码插入到目标类和方法中,实现AOP;

● 动态编织

动态编织则允许在JVM运行过程中完成指定方法的AOP字节码增强.常见的动态编织方案大多采用重命名原有方法,再新建一个同签名的方法来做代理的工作模式来完成AOP的功能(常见的实现方案如CgLib),但这种方式存在一些应用边界:

● 侵入性,对被代理的目标类需要进行侵入式改造。比如:在Spring中必须是托管于Spring容器中的Bean

● 固化性,目标代理方法在启动之后即固化,无法重新对一个已有方法进行AOP增强


热部署特性


还有一些实现AOP的方式是通过类似热部署的方式完成,但现有的热部署实现方案也存在一些应用边界:

● 性能折损巨大

● 对JVM存在侵入性

● 必须启动时显式开启

● 基于此我通过JDK6所提供的Instrumentation-API实现了利用HotSwap技术在不重启JVM的情况下实现对任意方法的AOP增强。而且性能开销还在可以接受的范围之内。


动态可插拔容器

为了实现沙箱模块的动态热插拔,容器客户端和沙箱动态可插拔容器采用HTTP协议进行通讯,底层用Jetty8作为HTTP服务器。



JVM-SANDBOX能做什么


在JVM沙箱(以下简称沙箱)的世界观中,任何一个Java方法的调用都可以分解为BEFORE、RETURN和THROWS三个环节,由此在三个环节上引申出对应环节的事件探测和流程控制机制。



基于BEFORE、RETURN和THROWS三个环节事件,可以完成很多类AOP的操作。

● 可以感知和改变方法调用的入参

● 可以感知和改变方法调用返回值和抛出的异常

● 可以改变方法执行的流程

    ○  在方法体执行之前直接返回自定义结果对象,原有方法代码将不会被执行

    ○ 在方法体返回之前重新构造新的结果对象,甚至可以改变为抛出异常

    ○  在方法体抛出异常之后重新抛出新的异常,甚至可以改变为正常返回

    ○  JVM沙箱都有哪些可能的应用场景


JVM沙箱都有哪些可能的应用场景

● 线上故障定位

● 线上系统流控

● 线上故障模拟

● 方法请求录制和结果回放

● 动态日志打印

● 安全信息监测和脱敏


JVM-SANDBOX环境要求

● JDK6+

● Linux/UNIX/MacOS;暂不支持Windows,主要是一些脚本需要改造


JVM沙箱还能帮助你做很多很多,取决于你的脑洞有多大了。


附:新开源报道汇总

《【新开源报道 40】OpenAI 开源最新工具包,十倍模型计算时间仅增20%》

《【新开源报道 39】Mozilla 开源稍后阅读应用 Pocket 代码》

《【新开源报道 38】那个被美国通缉的程序员,开发了一款保护你隐私的 App》

《【新开源报道 37】Facebook 开源语音识别工具包wav2letter》

《【新开源报道 36】有效减少错误代码!Instagram 开源用于 Python 3 的 MonkeyType 工具》

《【新开源报道 35】国内第一家私有视频通信软件 Tucodec 开源》

《【新开源报道 34】AMD 开源基于 Mesa 的 Vulkan Linux 驱动》

《【新开源报道 33】安全软件公司 Avast 开源机器码反编译器 RetDec》

《【新开源报道 32】谷歌开源 TFGAN:轻量级生成对抗网络工具库》

《【新开源报道 31】国内首套开源持续集成(CI) 解决方案 flow.ci 开源啦》

《【开源推荐 30】苹果开源领域又一深造:开源机器学习框架 Turi Create》

《【新开源推荐 29】AI开发者的福音:360公司宣布开源深度学习调度平台 XLearning!》

《【新开源推荐 28】百度正式开源 Linux 发行版 MesaLock Linux》

《【新开源报道 27】百度开源高性能 Python 分布式计算框架 Bigflow》

《【新开源报道 26】滴滴开源基于 Vue.js 的移动端组件库 cube-ui》

《【新开源报道 25】Google 开源 Docker 镜像差异分析工具 container-diff》

《【新开源报道 24】美团点评开源MySQL闪回工具 —— MyFlash》

《【新开源报道 23】IBM 推出首套开源现代化字体 —— IBM Plex》

《【新开源报道 22】Microsoft 开源用于 VS Code 的 Java Debugger》

《【新开源报道 21】阿里开源容器技术Pouch和P2P文件分发系统“蜻蜓”》

《【新开源报道 20】Uber正式开源其分布式跟踪系统Jaeger》

《【新开源报道 19】Uber与斯坦福大学开源深度概率编程语言Pyro》

《【新开源报道 18】谷歌开放内部工具 Colaboratory 来协助 AI 开发》

《【新开源报道 17】这波开源满分!清华大学开源网络嵌入的工具包 —— OpenNE

《【新开源报道 16】AI开发者福音!微软亚马逊联合发布深度学习库 Gloun》

《【新开源报道 15】谷歌发布量子开源软件,量子计算机对科学家免费开放 》

《【新开元报道 14】微软开源用于Spark的深度学习库MMLSpark》

《【新开源报道 13】Facebook 开源帮助开发者消灭最顽固的软件 bug 的工具》

《【新开源报道 12】不只是阿里巴巴的操作系统,AliOS 宣布开源》

《【新开源报道 11】重磅!阿里巴巴正式开源全球化OpenMessaging和ApsaraCache项目》

《【新开源报道 10】IBM 和谷歌等巨头联手为开发者推出开源容器安全工具Grafeas》

《【新开源报道 9】Google开源Abseil,为C++和Python开发提供支持》

《【新开源报道 8】serverless 领域的福音!Oracle 宣布开源 Fn project》

《【新开源报道 7】苹果在 GitHub 上公布 macOS 和 iOS 内核源码》

《【新开源报道 6】百度开源移动端深度学习框架mobile-deep-learning(MDL)》

《【新开源报道 5】百度正式开源其 RPC 框架 brpc》

《【新开源报道 4】IBM 开源动态的应用服务器运行时环境 Open Liberty》

《【新开源报道 3】微信后台团队最近开源力作:PhxQueue分布式队列》

《【新开源报道 2】喜大普奔!阿里即将开源 ApsaraCache,云数据库 Redis 版分支》

【新开源报道 1】腾讯 Web UI 解决方案 QMUI Web 正式回迁开源》



●本文编号148,以后想阅读这篇文章直接输入148即可

●输入m获取文章目录

↓↓↓ 点击"阅读原文" 进入GitHub详情页 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存